Micron Document
NexusPi Git Node

Node / mirrors / MeshChatX / files / tests / frontend / mapExchange.sanitize.test.js

Displaying Raw • Download

tests/frontend/mapExchange.sanitize.test.js 786bddfe0aebae27a59e4e8aa7a87ae9a1163c12 (786bddfe) Text, 7.80 KB

T8b949e// SPDX-License-Identifier: 0BSD

Tff7b72import Tb4b4b4{ Te6edf3describeTb4b4b4, Te6edf3itTb4b4b4, Te6edf3expect Tb4b4b4} Tff7b72from Ta5d6ff"vitest"Tb4b4b4;
Tff7b72import Te6edf3JSZip Tff7b72from Ta5d6ff"jszip"Tb4b4b4;
Tff7b72import Tb4b4b4{
Te6edf3isAllowedDataImageHrefTb4b4b4,
Te6edf3isRemoteHrefTb4b4b4,
Te6edf3kmzEntryAllowedTb4b4b4,
Te6edf3KmlSanitizeErrorTb4b4b4,
Te6edf3sanitizeKmlTextTb4b4b4,
Tb4b4b4} Tff7b72from Ta5d6ff"@/js/mapExchange/kmlSanitize.js"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3readKmlToFeatures Tb4b4b4} Tff7b72from Ta5d6ff"@/js/mapExchange/kmlCodec.js"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3readKmzToFeatures Tb4b4b4} Tff7b72from Ta5d6ff"@/js/mapExchange/kmzCodec.js"Tb4b4b4;

Tff7b72const Te6edf3TINY_PNG Tff7b72=
Ta5d6ff"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="Tb4b4b4;

Te6edf3describeTb4b4b4(Ta5d6ff"kmlSanitize oracle"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3itTb4b4b4(Ta5d6ff"classifies remote hrefs as remote"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3expectTb4b4b4(Te6edf3isRemoteHrefTb4b4b4(Ta5d6ff"https://evil.example/i.png"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3isRemoteHrefTb4b4b4(Ta5d6ff"http://evil.example/x"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3isRemoteHrefTb4b4b4(Ta5d6ff"//cdn.example/x.png"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3isRemoteHrefTb4b4b4(Ta5d6ff"file:///tmp/x"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3isRemoteHrefTb4b4b4(Ta5d6ff"javascript:alert(1)"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3isRemoteHrefTb4b4b4(Ta5d6ff"vbscript:msgbox(1)"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3isRemoteHrefTb4b4b4(Ta5d6ff"files/icon.png"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3isRemoteHrefTb4b4b4(Te6edf3TINY_PNGTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"allows only raster data image hrefs"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3expectTb4b4b4(Te6edf3isAllowedDataImageHrefTb4b4b4(Te6edf3TINY_PNGTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3isAllowedDataImageHrefTb4b4b4(Ta5d6ff"data:text/html;base64,PHNjcmlwdD4="Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3isAllowedDataImageHrefTb4b4b4(Ta5d6ff"data:image/svg+xml;base64,PHN2Zz4="Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"rejects svg and html kmz entries"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3expectTb4b4b4(Te6edf3kmzEntryAllowedTb4b4b4(Ta5d6ff"files/icon.png"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3kmzEntryAllowedTb4b4b4(Ta5d6ff"doc.kml"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3kmzEntryAllowedTb4b4b4(Ta5d6ff"icon.svg"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3kmzEntryAllowedTb4b4b4(Ta5d6ff"page.html"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3kmzEntryAllowedTb4b4b4(Ta5d6ff"../evil.kml"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"strips remote icon href and keeps placemark"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3kml Tff7b72= Ta5d6ff`Ta5d6ff<?xml version="1.0"?>
kml xmlns="http://www.opengis.net/kml/2.2"><Document>
Placemark><name>P</name>
Style><IconStyle><Icon><href>https://evil.example/i.png</href></Icon></IconStyle></Style>
Point><coordinates>1,2,0</coordinates></Point>
/Placemark></Document></kml>Ta5d6ff`Tb4b4b4;
Tff7b72const Te6edf3out Tff7b72= Te6edf3sanitizeKmlTextTb4b4b4(Te6edf3kmlTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4.Te6edf3strippedTb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"remote_href"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4.Te6edf3textTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"https://evil.example"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4.Te6edf3textTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"placemark"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3features Tff7b72= Te6edf3readKmlToFeaturesTb4b4b4(Te6edf3kmlTb4b4b4, Ta5d6ff"EPSG:3857"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3featuresTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeGreaterThanOrEqualTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"rejects network-link-only kml"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3kml Tff7b72= Ta5d6ff`Ta5d6ff<?xml version="1.0"?>
kml xmlns="http://www.opengis.net/kml/2.2"><Document>
NetworkLink><Link><href>https://evil.example/layer.kml</href></Link></NetworkLink>
/Document></kml>Ta5d6ff`Tb4b4b4;
Te6edf3expectTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3sanitizeKmlTextTb4b4b4(Te6edf3kmlTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toThrowTb4b4b4(Te6edf3KmlSanitizeErrorTb4b4b4)Tb4b4b4;
Tff7b72try Tb4b4b4{
Te6edf3sanitizeKmlTextTb4b4b4(Te6edf3kmlTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3expectTb4b4b4(Te6edf3eTb4b4b4.Te6edf3codeTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"remote_content"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"rejects dtd kml"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3kml Tff7b72= Ta5d6ff`Ta5d6ff<?xml version="1.0"?>
!DOCTYPE kml [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
kml xmlns="http://www.opengis.net/kml/2.2"><Document>
Placemark><name>x</name><Point><coordinates>1,2,0</coordinates></Point></Placemark>
/Document></kml>Ta5d6ff`Tb4b4b4;
Te6edf3expectTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3sanitizeKmlTextTb4b4b4(Te6edf3kmlTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toThrowTb4b4b4(Te6edf3KmlSanitizeErrorTb4b4b4)Tb4b4b4;
Tff7b72try Tb4b4b4{
Te6edf3sanitizeKmlTextTb4b4b4(Te6edf3kmlTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3expectTb4b4b4(Te6edf3eTb4b4b4.Te6edf3codeTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"dtd_forbidden"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"keeps kmz zip-local png icons"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3kml Tff7b72= Ta5d6ff`Ta5d6ff<?xml version="1.0"?>
kml xmlns="http://www.opengis.net/kml/2.2"><Document>
Placemark><name>Z</name>
Style><IconStyle><Icon><href>files/icon.png</href></Icon></IconStyle></Style>
Point><coordinates>1,2,0</coordinates></Point>
/Placemark></Document></kml>Ta5d6ff`Tb4b4b4;
Tff7b72const Te6edf3zip Tff7b72= Tff7b72new Te6edf3JSZipTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3zipTb4b4b4.Te6edf3fileTb4b4b4(Ta5d6ff"doc.kml"Tb4b4b4, Te6edf3kmlTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3png Tff7b72= Tffa657Uint8ArrayTb4b4b4.Tff7b72fromTb4b4b4(
Te6edf3atobTb4b4b4(Ta5d6ff"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3cTb4b4b4) Tb4b4b4=> Te6edf3cTb4b4b4.Te6edf3charCodeAtTb4b4b4(T79c0ff0Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Te6edf3zipTb4b4b4.Te6edf3fileTb4b4b4(Ta5d6ff"files/icon.png"Tb4b4b4, Te6edf3pngTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3buf Tff7b72= Tff7b72await Te6edf3zipTb4b4b4.Te6edf3generateAsyncTb4b4b4(Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"arraybuffer" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3features Tff7b72= Tff7b72await Te6edf3readKmzToFeaturesTb4b4b4(Te6edf3bufTb4b4b4, Ta5d6ff"EPSG:3857"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3featuresTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeGreaterThanOrEqualTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"strips xlink:href remote icons and vbscript hrefs"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3kml Tff7b72= Ta5d6ff`Ta5d6ff<?xml version="1.0"?>
kml xmlns="http://www.opengis.net/kml/2.2" xmlns:xlink="http://www.w3.org/1999/xlink"><Document>
Placemark><name>P</name>
Icon xlink:href="https://evil.example/i.png"/>
Icon><href>vbscript:msgbox(1)</href></Icon>
Point><coordinates>1,2,0</coordinates></Point>
/Placemark></Document></kml>Ta5d6ff`Tb4b4b4;
Tff7b72const Te6edf3out Tff7b72= Te6edf3sanitizeKmlTextTb4b4b4(Te6edf3kmlTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4.Te6edf3textTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"evil.example"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4.Te6edf3textTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"vbscript:"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4.Te6edf3strippedTb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"remote_href"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"flattens CDATA HTML descriptions without leaving a CDATA closer"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3kml Tff7b72= Ta5d6ff`Ta5d6ff<?xml version="1.0" encoding="utf-8"?>
kml xmlns="http://www.opengis.net/kml/2.2"><Document>
Placemark><name>Leaking Tanks</name>
description><![CDATA[<h2>Hostile</h2></br><script>alert(1)</script>]]></description>
Point><coordinates>-117.99,33.78,0</coordinates></Point>
/Placemark></Document></kml>Ta5d6ff`Tb4b4b4;
Tff7b72const Te6edf3out Tff7b72= Te6edf3sanitizeKmlTextTb4b4b4(Te6edf3kmlTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4.Te6edf3strippedTb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"html_description"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4.Te6edf3textTb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toMatchTb4b4b4(Ta5d6ff/\]\]>/Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4.Te6edf3textTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"<script"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4.Te6edf3textTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"<h2"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3parsed Tff7b72= Tff7b72new Te6edf3DOMParserTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3parseFromStringTb4b4b4(Te6edf3outTb4b4b4.Te6edf3textTb4b4b4, Ta5d6ff"application/xml"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3parsedTb4b4b4.Te6edf3getElementsByTagNameTb4b4b4(Ta5d6ff"parsererror"Tb4b4b4)Tb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3features Tff7b72= Te6edf3readKmlToFeaturesTb4b4b4(Te6edf3kmlTb4b4b4, Ta5d6ff"EPSG:3857"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3featuresTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tffa657StringTb4b4b4(Te6edf3featuresTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"name"Tb4b4b4) Tff7b72|| Ta5d6ff""Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"Leaking"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"skips unreferenced svg kmz entry and keeps placemarks"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3kml Tff7b72= Ta5d6ff`Ta5d6ff<?xml version="1.0"?>
kml xmlns="http://www.opengis.net/kml/2.2"><Document>
Placemark><name>Keep</name><Point><coordinates>1,2,0</coordinates></Point></Placemark>
/Document></kml>Ta5d6ff`Tb4b4b4;
Tff7b72const Te6edf3zip Tff7b72= Tff7b72new Te6edf3JSZipTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3zipTb4b4b4.Te6edf3fileTb4b4b4(Ta5d6ff"doc.kml"Tb4b4b4, Te6edf3kmlTb4b4b4)Tb4b4b4;
Te6edf3zipTb4b4b4.Te6edf3fileTb4b4b4(Ta5d6ff"icon.svg"Tb4b4b4, Ta5d6ff"<svg></svg>"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3buf Tff7b72= Tff7b72await Te6edf3zipTb4b4b4.Te6edf3generateAsyncTb4b4b4(Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"arraybuffer" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3features Tff7b72= Tff7b72await Te6edf3readKmzToFeaturesTb4b4b4(Te6edf3bufTb4b4b4, Ta5d6ff"EPSG:3857"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3featuresTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeGreaterThanOrEqualTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"imports ArcGIS-style kmz with unused xsl sidecar"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3kml Tff7b72= Ta5d6ff`Ta5d6ff<?xml version="1.0"?>
kml xmlns="http://www.opengis.net/kml/2.2"><Document>
Style id="s"><IconStyle><Icon><href>Layer0_Symbol.png</href></Icon></IconStyle></Style>
Placemark><name>ArcGIS Point</name>
styleUrl>#s</styleUrl>
Point><coordinates>1,2,0</coordinates></Point>
/Placemark></Document></kml>Ta5d6ff`Tb4b4b4;
Tff7b72const Te6edf3zip Tff7b72= Tff7b72new Te6edf3JSZipTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3zipTb4b4b4.Te6edf3fileTb4b4b4(Ta5d6ff"doc.kml"Tb4b4b4, Te6edf3kmlTb4b4b4)Tb4b4b4;
Te6edf3zipTb4b4b4.Te6edf3fileTb4b4b4(
Ta5d6ff"F2E8A9CB2E0A446C9BCA87742DD683E5.xsl"Tb4b4b4,
Ta5d6ff"<?xml version='1.0'?><xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'/>"
Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3png Tff7b72= Tffa657Uint8ArrayTb4b4b4.Tff7b72fromTb4b4b4(
Te6edf3atobTb4b4b4(Ta5d6ff"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3cTb4b4b4) Tb4b4b4=> Te6edf3cTb4b4b4.Te6edf3charCodeAtTb4b4b4(T79c0ff0Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Te6edf3zipTb4b4b4.Te6edf3fileTb4b4b4(Ta5d6ff"Layer0_Symbol.png"Tb4b4b4, Te6edf3pngTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3buf Tff7b72= Tff7b72await Te6edf3zipTb4b4b4.Te6edf3generateAsyncTb4b4b4(Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"arraybuffer" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3features Tff7b72= Tff7b72await Te6edf3readKmzToFeaturesTb4b4b4(Te6edf3bufTb4b4b4, Ta5d6ff"EPSG:3857"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3featuresTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeGreaterThanOrEqualTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tffa657StringTb4b4b4(Te6edf3featuresTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"name"Tb4b4b4) Tff7b72|| Ta5d6ff""Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"ArcGIS"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Served by rngit 1.5.2 - Generated in 0.02s